import axios from 'axios';
import store from '../store';
import { Message } from 'element-ui';

// 覆写库的正式环境的路径。生产环境为网关地址，开发环境及测试环境设置请求到/api路由代理
// process.env.NODE_ENV === 'production' 生产环境
// process.env.NODE_ENV === 'development' 开发环境
// process.env.NODE_ENV === 'test' 测试环境
axios.defaults.baseURL = process.env.NODE_ENV === 'production' ? './' : '/api';
// 现在，在超时前，所有请求都会等待 1200 秒
axios.defaults.timeout = 1200000;
// 添加请求拦截器
axios.interceptors.request.use(function(axiosRequestConfig) {
  // 在此处设置请求发送前的各种配置信息，具体Congfig内容参见axios文档http://www.axios-js.com/zh-cn/docs/
  // 开启跨域携带cookie
  axiosRequestConfig.withCredentials = true;

  if (axiosRequestConfig.url.indexOf('aliyuncs.com') === -1) {
    // axiosRequestConfig.headers.UID = '99999999';
    axiosRequestConfig.headers.UID = store.state.user.uid;
  } else {
    axiosRequestConfig.withCredentials = false;
  }

  // 在请求头中加token
  // if (localStorage.getItem('token')) {
  axiosRequestConfig.headers.token = store.state.user.token;
  // }

  // for production, to do something
  return axiosRequestConfig;
}, function(error) {
  // 对请求错误做些什么
  Message.error(error.message);
  return Promise.reject(error);
});

// 添加响应拦截器
axios.interceptors.response.use(function(axiosResponse) {
  // 对响应数据做点什么
  if (!axiosResponse.data.result && axiosResponse.data.result !== 0) {
    return axiosResponse.data;
  }
  // 处理登录与注册的问题
  if (axiosResponse.config.url === '/api/user/login/v2' || axiosResponse.config.url === '/api/user/register/v2') {
    return axiosResponse.data;
  }
  if (axiosResponse.data.result !== 0) {
    var errorMsg = typeof axiosResponse.data.rmsg === 'string' ? axiosResponse.data.rmsg : 'network error';
    if (errorMsg.indexOf('_runtime') !== -1) { // 对runtime库的报错
      errorMsg = '运行时出错，请尝试再次运行';
    }
    Message.error(errorMsg);
    return Promise.reject(new Error(errorMsg));
  }
  return axiosResponse.data.data;
}, function(error) {
  Message.error(error.message);
  // 对响应错误做点什么
  return Promise.reject(error);
});
